#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/un.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/types.h>
#include <vector>
#include <string>
#include <cstring>

using namespace std;


int main(){
  //declare vars die we nodig  hebben.
  size_t pos[4] = {'0'}; //4
  size_t len;
  string ipString("8a4.5.12.55"); //de string waarin we een kopie maken van wat we gaan gebruiken.
  char buffer[20] = {'\0'}; //de buffer waar we alles tijdelijke naar toe gaan copy'n.
  int counter = 0; //De counter die kijkt wat onze huidige positie is in de loop.
  bool check[4] = {false}; //om te kijken of het getal dat we halen wel voldoet een de gegeven van een geldige byte van een ipv4 adres.
  int ipElements[4] = {'\0'}; //4

  //----------------Kijken of er een punt is in de string.
  if(string::npos == ipString.find('.'))
    return false; //stop de methode hier. Het is geen valid ipv4 want is er geen punt. return false en gebruik 127.0.0.1 
  //---------------END

  //--------------Start de while loop
  while(counter != 4){ //3, als een je niet goed bent in c :) vergeet onze 0 niet hé
    pos[counter] = ipString.find(".", 1); //vind de eerste punt in de buffer.
    ipString.copy(&buffer[0], int((pos[counter])), 0); //copy eerste stuk tot aan . naar buffer
    ipElements[counter] = atoi(&buffer[0]); //van buffer naar array.
    memset(&buffer[0], '\0', 20);
    ipString.erase(0, int((pos[counter])+1));
    
    if(ipElements[counter] >= ipElements[counter] && ipElements[counter] <= 255){
      check[counter] = true;
    }

    else{
          return false;
    }
    
    counter++;
  }
  if(check[0] == true && check[1] == true && check[2] == true && check[3] == true)
	return true;
      else
	return false;

}
